library(readxl)
library(psych)
library(tidyverse)
library(epiDisplay)
library(ggplot2)
library(ggrepel)
library(qcc)
library(fBasics)
library(RcmdrMisc)
library(aplpack)
2 Intro a analizar Base de Datos, y gráficos
2.1 Cargando los Paquetes
Se inicia el análisis instalando (si es necesario) y cargando todas las librerías que se utilizarán a lo largo del documento.
2.2 Lectura de Base de Datos
Se establece el directorio de trabajo y se leen los datos desde un archivo de Excel. Nota: Para una mejor portabilidad del código, se recomienda el uso de Proyectos de RStudio, que establecen el directorio de trabajo automáticamente en la carpeta del proyecto.
<- read_excel("Datos_informe.xlsx") Escuelas
2.3 Exploración del Set de Datos
Se realiza una revisión inicial del conjunto de datos para entender su estructura, dimensiones y el tipo de cada variable.
# View(Escuelas) # Para ver la base de datos, no ejecutar si es muy grande
head(Escuelas, 10) # Muestra las primeras 10 filas
# A tibble: 10 × 13
Escuela Cod Pais Insc_t_completo Alumnos_facultad Costo_local
<chr> <dbl> <chr> <dbl> <dbl> <dbl>
1 Melbourne Business … 2345 Aust… 200 5 24420
2 University of South… 2347 Aust… 228 4 19993
3 Indian University o… 2349 India 392 5 4300
4 Chinese University … 2351 China 90 5 11140
5 International Unive… 2353 Japon 126 4 33060
6 Asian Institute of … 2355 Fili… 389 5 7562
7 Indian Institute of… 2357 India 380 5 3935
8 National University… 2359 Sing… 147 6 6146
9 Indian Institute of… 2361 India 463 8 2880
10 Australian National… 2363 Aust… 42 2 20300
# ℹ 7 more variables: Costo_extranjero <dbl>, Edad <dbl>, Porc_extranj <dbl>,
# GMAT <chr>, Ex_Ingles <chr>, Experiencia <dbl>, Sueldo_inicial <dbl>
tail(Escuelas, 10) # Muestra las ultimas 10 filas
# A tibble: 10 × 13
Escuela Cod Pais Insc_t_completo Alumnos_facultad Costo_local
<chr> <dbl> <chr> <dbl> <dbl> <dbl>
1 Monash Mt Eliza Bus… 2375 Aust… 350 13 16200
2 Asian Institute of … 2377 Tail… 300 10 18200
3 University of Adela… 2379 Aust… 20 19 16426
4 Massey University 2381 Nuev… 30 15 13106
5 Royal Melbourne Ins… 2383 Aust… 30 7 13880
6 Jamnalal Bajaj Inst… 2385 India 240 9 1000
7 Curlin Institute of… 2387 Aust… 98 15 9475
8 Lahore University o… 2389 Paki… 70 14 11250
9 Universiti Sains Ma… 2391 Mala… 30 5 2260
10 De La Salle Univers… 2393 Mala… 44 17 3300
# ℹ 7 more variables: Costo_extranjero <dbl>, Edad <dbl>, Porc_extranj <dbl>,
# GMAT <chr>, Ex_Ingles <chr>, Experiencia <dbl>, Sueldo_inicial <dbl>
# Usando el pipe (%>%) para encadenar operaciones
%>% head(10) Escuelas
# A tibble: 10 × 13
Escuela Cod Pais Insc_t_completo Alumnos_facultad Costo_local
<chr> <dbl> <chr> <dbl> <dbl> <dbl>
1 Melbourne Business … 2345 Aust… 200 5 24420
2 University of South… 2347 Aust… 228 4 19993
3 Indian University o… 2349 India 392 5 4300
4 Chinese University … 2351 China 90 5 11140
5 International Unive… 2353 Japon 126 4 33060
6 Asian Institute of … 2355 Fili… 389 5 7562
7 Indian Institute of… 2357 India 380 5 3935
8 National University… 2359 Sing… 147 6 6146
9 Indian Institute of… 2361 India 463 8 2880
10 Australian National… 2363 Aust… 42 2 20300
# ℹ 7 more variables: Costo_extranjero <dbl>, Edad <dbl>, Porc_extranj <dbl>,
# GMAT <chr>, Ex_Ingles <chr>, Experiencia <dbl>, Sueldo_inicial <dbl>
%>% tail(5) %>% summary() Escuelas
Escuela Cod Pais Insc_t_completo
Length:5 Min. :2385 Length:5 Min. : 30.0
Class :character 1st Qu.:2387 Class :character 1st Qu.: 44.0
Mode :character Median :2389 Mode :character Median : 70.0
Mean :2389 Mean : 96.4
3rd Qu.:2391 3rd Qu.: 98.0
Max. :2393 Max. :240.0
Alumnos_facultad Costo_local Costo_extranjero Edad
Min. : 5 Min. : 1000 Min. : 1000 Min. :23.0
1st Qu.: 9 1st Qu.: 2260 1st Qu.: 2260 1st Qu.:24.0
Median :14 Median : 3300 Median : 3600 Median :28.0
Mean :12 Mean : 5457 Mean :10451 Mean :27.2
3rd Qu.:15 3rd Qu.: 9475 3rd Qu.:19097 3rd Qu.:29.0
Max. :17 Max. :11250 Max. :26300 Max. :32.0
Porc_extranj GMAT Ex_Ingles Experiencia
Min. : 0.0 Length:5 Length:5 Min. :0.0
1st Qu.: 2.5 Class :character Class :character 1st Qu.:1.0
Median : 3.5 Mode :character Mode :character Median :1.0
Mean :12.8 Mean :0.8
3rd Qu.:15.0 3rd Qu.:1.0
Max. :43.0 Max. :1.0
Sueldo_inicial
Min. : 7000
1st Qu.: 7500
Median :13100
Mean :19720
3rd Qu.:16000
Max. :55000
2.3.1 Tipos de variables y conversión
Se verifica la estructura y se convierten las columnas al tipo de dato apropiado (en este caso, a factor
para las variables categóricas).
%>% str() # Da el resumen de la tabla Escuelas
tibble [25 × 13] (S3: tbl_df/tbl/data.frame)
$ Escuela : chr [1:25] "Melbourne Business School" "University of South Wales" "Indian University of Management" "Chinese University of Hong Kong" ...
$ Cod : num [1:25] 2345 2347 2349 2351 2353 ...
$ Pais : chr [1:25] "Australia" "Australia" "India" "China" ...
$ Insc_t_completo : num [1:25] 200 228 392 90 126 389 380 147 463 42 ...
$ Alumnos_facultad: num [1:25] 5 4 5 5 4 5 5 6 8 2 ...
$ Costo_local : num [1:25] 24420 19993 4300 11140 33060 ...
$ Costo_extranjero: num [1:25] 29600 32582 4300 11140 33060 ...
$ Edad : num [1:25] 28 29 22 29 28 25 23 29 23 30 ...
$ Porc_extranj : num [1:25] 47 28 0 10 60 50 1 51 0 80 ...
$ GMAT : chr [1:25] "Si" "Si" "No" "Si" ...
$ Ex_Ingles : chr [1:25] "No" "No" "No" "No" ...
$ Experiencia : num [1:25] 1 1 0 0 0 1 0 1 0 1 ...
$ Sueldo_inicial : num [1:25] 71400 65200 7100 31000 87000 22800 7500 43300 7400 46600 ...
%>% dim() # Dimensión de la tabla Escuelas
[1] 25 13
%>% colnames() # Muestra el Nombre de las columnas Escuelas
[1] "Escuela" "Cod" "Pais" "Insc_t_completo"
[5] "Alumnos_facultad" "Costo_local" "Costo_extranjero" "Edad"
[9] "Porc_extranj" "GMAT" "Ex_Ingles" "Experiencia"
[13] "Sueldo_inicial"
# Conversión de columnas a tipo factor
c(1,2,3,10,11,12)] <- lapply(Escuelas[,c(1,2,3,10,11,12)], as.factor)
Escuelas[,
# Se recodifican los niveles de la variable 'Experiencia'
levels(Escuelas$Experiencia) <- c("No","Si")
# Se consultan las categorías únicas de la variable 'Pais'
%>% distinct(Pais) Escuelas
# A tibble: 10 × 1
Pais
<fct>
1 Australia
2 India
3 China
4 Japon
5 Filipinas
6 Singapur
7 Tailandia
8 Nueva Zelanda
9 Pakistán
10 Malasia
2.4 1. Análisis de Variables Cualitativas
2.4.1 1.1 Tablas de Frecuencia
Se generan tablas para resumir las frecuencias absolutas y relativas de las variables categóricas.
%>% count(Pais) # Muestra las frecuencias absolutas Escuelas
# A tibble: 10 × 2
Pais n
<fct> <int>
1 Australia 9
2 China 2
3 Filipinas 1
4 India 4
5 Japon 1
6 Malasia 2
7 Nueva Zelanda 1
8 Pakistán 1
9 Singapur 2
10 Tailandia 2
table(Escuelas$Pais) # Da la tabla de frecuencias sencilla
Australia China Filipinas India Japon
9 2 1 4 1
Malasia Nueva Zelanda Pakistán Singapur Tailandia
2 1 1 2 2
# Tabla de frecuencias completa con porcentajes y acumulados
tab1(Escuelas$Pais, graph=FALSE)
Escuelas$Pais :
Frequency Percent Cum. percent
Australia 9 36 36
China 2 8 44
Filipinas 1 4 48
India 4 16 64
Japon 1 4 68
Malasia 2 8 76
Nueva Zelanda 1 4 80
Pakistán 1 4 84
Singapur 2 8 92
Tailandia 2 8 100
Total 25 100 100
2.4.2 1.2 Gráficos
Se utilizan diferentes tipos de gráficos para visualizar la distribución de las variables cualitativas.
2.4.2.1 Diagrama de barras a color
2.4.2.2 Diagrama de torta más elaborado
<- Escuelas %>% count(Pais) # Cuenta las frecuencias de país
Escuelas2 $n <- Escuelas2$n * 100 / sum(Escuelas2$n) # Saca el porcentaje de cada parte
Escuelas2
<- Escuelas2 %>%
Escuelas3 mutate(csum = rev(cumsum(rev(n))),
pos = n/2 + lead(csum, 1),
pos = if_else(is.na(pos), n/2, pos))
ggplot(Escuelas2, aes(x = "" , y = n, fill = fct_inorder(Pais))) +
geom_col(width = 1, color = 1) +
coord_polar(theta = "y") +
scale_fill_brewer(palette = "Pastel1") +
geom_label_repel(data = Escuelas3,
aes(y = pos, label = paste0(round(n, 1), "%")),
size = 4.5, nudge_x = 1, show.legend = FALSE) +
guides(fill = guide_legend(title = "País")) +
theme_void()
Warning in RColorBrewer::brewer.pal(n, pal): n too large, allowed maximum for palette Pastel1 is 9
Returning the palette you asked for with that many colors
2.4.2.3 Diagrama de Pareto
pareto.chart(table(Escuelas$Pais), main="Diagrama de Pareto de País")
Pareto chart analysis for table(Escuelas$Pais)
Frequency Cum.Freq. Percentage Cum.Percent.
Australia 9 9 36 36
India 4 13 16 52
China 2 15 8 60
Malasia 2 17 8 68
Singapur 2 19 8 76
Tailandia 2 21 8 84
Filipinas 1 22 4 88
Japon 1 23 4 92
Nueva Zelanda 1 24 4 96
Pakistán 1 25 4 100
2.5 2. Análisis de Variables Cuantitativas
2.5.1 2.1 Tablas de Frecuencia
Para variables continuas, es necesario agrupar los datos en intervalos para crear tablas de frecuencia.
library(fdth)
Attaching package: 'fdth'
The following objects are masked from 'package:stats':
sd, var
# Si toma muchos valores, es mejor hacer una tabla de datos agrupados
# Se utiliza la regla de Sturges para definir los intervalos.
<- fdt(Escuelas$Costo_local, breaks = "Sturges")
Tabla_frec Tabla_frec
Class limits f rf rf(%) cf cf(%)
[990,6390.1) 7 0.28 28 7 28
[6390.1,11790.2) 6 0.24 24 13 52
[11790.2,17190.3) 6 0.24 24 19 76
[17190.3,22590.4) 4 0.16 16 23 92
[22590.4,27990.5) 1 0.04 4 24 96
[27990.5,33390.6) 1 0.04 4 25 100
2.5.2 2.2 Gráficos
2.5.2.1 Histogramas
El histograma es la herramienta gráfica principal para visualizar la distribución de una variable cuantitativa.
2.5.2.2 Boxplot
El diagrama de caja o boxplot resume la distribución a través de sus cuartiles e identifica valores atípicos.
2.5.3 2.3 Estadísticas de los datos
Se calculan diversas medidas de resumen para describir las variables cuantitativas.
# Medidas de tendencia central y dispersión
mean(Escuelas$Insc_t_completo)
[1] 165.16
median(Escuelas$Insc_t_completo)
[1] 126
sd(Escuelas$Insc_t_completo)
[1] 140.8411
max(Escuelas$Insc_t_completo)
[1] 463
min(Escuelas$Insc_t_completo)
[1] 12
# Medidas de posición (Cuantiles)
# Cuartiles
quantile(x = Escuelas$Insc_t_completo, probs = seq(0, 1, by = 1/4))
0% 25% 50% 75% 100%
12 44 126 240 463
# Deciles
quantile(Escuelas$Insc_t_completo, probs = seq(0, 1, 1/10))
0% 10% 20% 30% 40% 50% 60% 70% 80% 90% 100%
12.0 30.0 39.6 52.0 82.0 126.0 168.2 222.4 310.0 385.4 463.0
# Percentiles
quantile(Escuelas$Insc_t_completo, probs = 0.95)
95%
391.4
# Resumen estadístico completo
summary(Escuelas)
Escuela Cod Pais
Asian Institute of Management : 2 2345 : 1 Australia:9
Australian National University : 1 2347 : 1 India :4
Chinese University of Hong Kong: 1 2349 : 1 China :2
Chulalongkorn University : 1 2351 : 1 Malasia :2
Curlin Institute of Technology : 1 2353 : 1 Singapur :2
De La Salle University : 1 2355 : 1 Tailandia:2
(Other) :18 (Other):19 (Other) :4
Insc_t_completo Alumnos_facultad Costo_local Costo_extranjero
Min. : 12.0 Min. : 2.00 Min. : 1000 Min. : 1000
1st Qu.: 44.0 1st Qu.: 5.00 1st Qu.: 6146 1st Qu.: 9000
Median :126.0 Median : 7.00 Median :11513 Median :17765
Mean :165.2 Mean : 8.48 Mean :12375 Mean :16582
3rd Qu.:240.0 3rd Qu.:13.00 3rd Qu.:17172 3rd Qu.:22500
Max. :463.0 Max. :19.00 Max. :33060 Max. :33060
Edad Porc_extranj GMAT Ex_Ingles Experiencia Sueldo_inicial
Min. :22.00 Min. : 0.00 No:11 No:17 No: 6 Min. : 7000
1st Qu.:25.00 1st Qu.: 6.00 Si:14 Si: 8 Si:19 1st Qu.:16000
Median :29.00 Median :27.00 Median :41400
Mean :28.36 Mean :28.08 Mean :37292
3rd Qu.:30.00 3rd Qu.:43.00 3rd Qu.:52500
Max. :37.00 Max. :90.00 Max. :87000
basicStats(Escuelas$Insc_t_completo)
X..Escuelas.Insc_t_completo
nobs 25.000000
NAs 0.000000
Minimum 12.000000
Maximum 463.000000
1. Quartile 44.000000
3. Quartile 240.000000
Mean 165.160000
Median 126.000000
Sum 4129.000000
SE Mean 28.168226
LCL Mean 107.023640
UCL Mean 223.296360
Variance 19836.223333
Stdev 140.841128
Skewness 0.668241
Kurtosis -1.009321
2.6 3. Análisis de Pares de Variables
2.6.1 3.1 Dos Variables Cualitativas
2.6.1.1 Tablas de Contingencia
Se utilizan para explorar la relación entre dos variables categóricas, mostrando frecuencias conjuntas y perfiles.
<- xtabs(~Ex_Ingles + GMAT, data = Escuelas)
Table addmargins(Table) #Frec. Absolutas
GMAT
Ex_Ingles No Si Sum
No 7 10 17
Si 4 4 8
Sum 11 14 25
# totPercents(Table) #Frec. Relativas
rowPercents(Table) #Perfiles fila
GMAT
Ex_Ingles No Si Total Count
No 41.2 58.8 100 17
Si 50.0 50.0 100 8
colPercents(Table) #Perfiles columna
GMAT
Ex_Ingles No Si
No 63.6 71.4
Si 36.4 28.6
Total 100.0 100.0
Count 11.0 14.0
# Gráfico de barras apiladas para perfiles
ggplot(Escuelas, aes(x = Pais, fill = GMAT)) +
geom_bar(position = "fill") +
theme_minimal() +
theme(axis.text.x = element_text(angle = 30, size = 8))
2.6.2 3.2 Una Cualitativa y otra Cuantitativa
2.6.2.1 Boxplots por categorías
Permiten comparar la distribución de una variable cuantitativa a través de las categorías de una variable cualitativa.
2.6.2.2 Histogramas por categorías
Permiten visualizar la forma de la distribución de la variable cuantitativa para cada categoría.
2.6.3 3.3 Dos variables cuantitativas
2.6.3.1 Coeficiente de correlación
Mide la fuerza y dirección de la relación lineal entre dos variables cuantitativas.
cor(Escuelas$Costo_local, Escuelas$Costo_extranjero)
[1] 0.8347421
2.6.3.2 Diagrama de dispersión
Visualiza la relación entre dos variables cuantitativas. Se pueden añadir otras variables a través del color o el tamaño.
2.7 4. Opcional: Gráficos Multivariados
2.7.1 Diagrama de estrellas o de radar
Visualiza múltiples variables cuantitativas para cada observación.
2.7.2 Caras de Chernoff
Mapea variables multivariadas a características de un rostro humano.
<- faces(subset[1:10, ], face.type = 1) a
effect of variables:
modified item Var
"height of face " "Insc"
"width of face " "Edad"
"structure of face" "cost_l"
"height of mouth " "al_pr"
"width of mouth " "Insc"
"smiling " "Edad"
"height of eyes " "cost_l"
"width of eyes " "al_pr"
"height of hair " "Insc"
"width of hair " "Edad"
"style of hair " "cost_l"
"height of nose " "al_pr"
"width of nose " "Insc"
"width of ear " "Edad"
"height of ear " "cost_l"
plot.faces(a)